package java.util.stream.thread;

import java.util.concurrent.locks.LockSupport;

public enum State {
    /**
     * 刚刚新创建的线程, 尚未启动的线程的线程状态。
     */
    NEW,

    /**
     * 可运行线程的线程状态。
     * 处于可运行状态的线程正在Java虚拟机中执行，但它可能正在等待来自操作系统（例如处理器）的其他资源。
     */
    RUNNABLE,

    /**
     * 线程的线程状态被阻塞，等待监视器锁定。
     * 处于阻塞状态的线程在调用{@link Object＃wait（）Object.wait}之后，
     * 正在等待监视器锁定输入同步的块/方法或重新输入同步的块/方法。
     */
    BLOCKED,

    /**
     * 等待线程的线程状态。
     * 由于线程调用以下方法之一，线程处于等待状态:
     * Object.wait();
     * Thread.join();
     * LockSupport.park();
     *
     * 处于等待状态的线程正在等待另一个线程执行特定操作。
     *比如： 线程A 调用了 Object.wait()方法，它会等待其他线程调用 Object.notify()或者Object.notifyAll()方法。
     *又比如： 线程B 调用了 Thread.join(),它就会等待这个线程完成特定的操作。
     */
    WAITING,

    /**
     * 具有指定等待时间的等待线程的线程状态。
     * 线程由于调用了以下方法之一而处于定时等待状态 :
     * Thread.sleep()
     * Object.wait()
     * Thread.join()
     * LockSupport.parkNanos()
     * LockSupport.parkUntil()
     */
    TIMED_WAITING,

    /**
     * 终止线程的线程状态。
     * 表示线程已完成执行。
     */
    TERMINATED;
}